//package com.zyf.service.txt;
//
//import cn.hutool.core.io.FileUtil;
//import com.itextpdf.kernel.pdf.PdfReader;
//import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
//import net.sourceforge.tess4j.Tesseract;
//import nl.siegmann.epublib.domain.Book;
//import nl.siegmann.epublib.epub.EpubReader;
//
//
//
//import java.awt.image.BufferedImage;
//import java.io.*;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//
///**
// * 处理文档
// */
//public class HandleTxtBP {
//
//    /**
//     * pdf 转txt
//     *
//     * @param folderPath
//     */
//    public void handPdfToTxtByPdfText(String folderPath) throws Exception {
//        List<File> txtList = FileUtil.loopFiles(folderPath, file -> file.isFile() && file.getName().endsWith(".pdf"));
//        for (File file : txtList) {
//            String pdfPath = file.getAbsolutePath();
//            String txtPath = file.getAbsolutePath().replace(".pdf", ".txt");
//            PdfReader reader = null;
//            FileWriter writer = null;
//            try {
//                reader = new PdfReader(pdfPath);
//                writer = new FileWriter(txtPath);
////                int numberOfPages = reader.getNumberOfPages();
////                for (int i = 1; i <= numberOfPages; i++) {
////                    String pageText = PdfTextExtractor.getTextFromPage(reader, i);
////                    writer.write(pageText);
////                }
//                System.out.println("PDF 转换为 TXT 成功！");
//            } catch (IOException e) {
//                System.err.println("转换过程中出现错误：" + e.getMessage());
//            } finally {
//                if (reader != null) {
//                    reader.close();
//                }
//                if (writer != null) {
//                    writer.close();
//                }
//            }
//        }
//    }
//
//    /**
//     * pdf 转txt
//     *
//     * @param folderPath
//     */
//    public void handPdfToTxtByPDDocument(String folderPath) throws Exception {
//        List<File> txtList = FileUtil.loopFiles(folderPath, file -> file.isFile() && file.getName().endsWith(".pdf"));
//        for (File file : txtList) {
//            String pdfPath = file.getAbsolutePath();
//            String txtPath = file.getAbsolutePath().replace(".pdf", ".txt");
//            try (PDDocument document = PDDocument.load(new File(pdfPath));
//                 FileWriter writer = new FileWriter(new File(txtPath))) {
//
//                PDFTextStripper pdfTextStripper = new PDFTextStripper();
//                String text = pdfTextStripper.getText(document);
//                writer.write(text);
//                System.out.println("PDF 转换为 TXT 成功！");
//            } catch (IOException e) {
//                System.err.println("转换过程中出现错误：" + e.getMessage());
//            }
//        }
//    }
//
//    /**
//     * pdf 转txt
//     *
//     * @param folderPath
//     */
//    public void handPdfToTxtByOCR(String folderPath) throws Exception {
//        List<File> txtList = FileUtil.loopFiles(folderPath, file -> file.isFile() && file.getName().endsWith(".pdf"));
//        for (File file : txtList) {
//            String pdfPath = file.getAbsolutePath();
//            String txtPath = file.getAbsolutePath().replace(".pdf", ".txt");
//            PdfReader reader = null;
//            FileWriter writer = null;
//            try {
//                reader = new PdfReader(pdfPath);
//                writer = new FileWriter(txtPath);
//                // 使用 PDFBox 将 PDF 转换为图像
//                try (PDDocument document = PDDocument.load(new File(pdfPath))) {
//                    PDFRenderer pdfRenderer = new PDFRenderer(document);
//                    List<BufferedImage> images = new ArrayList<>();
//
//                    // 将 PDF 每一页转换为图像
//                    for (int pageIndex = 0; pageIndex < document.getNumberOfPages(); pageIndex++) {
//                        BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 300, ImageType.RGB);
//                        images.add(image);
//                    }
//
//                    Tesseract tesseract = new Tesseract();
//                    // 设置 Tesseract OCR 数据路径（根据实际安装路径修改）
//                    tesseract.setDatapath("C:\\Program Files\\Tesseract-OCR\\tessdata");
//                    // 设置识别语言，例如 "eng" 为英文，"chi_sim" 为简体中文
//                    tesseract.setLanguage("chi_sim");
//
//                    StringBuilder text = new StringBuilder();
//                    // 对每一页图像进行 OCR 识别
//                    for (BufferedImage image : images) {
//                        String pageText = tesseract.doOCR(image);
//                        text.append(pageText);
//                    }
//                    System.out.println(text.toString());
//                    writer.write(text.toString());
//                }
//            } catch (Exception e) {
//                System.err.println("转换过程中出现错误：" + e.getMessage());
//            } finally {
//                if (reader != null) {
//                    reader.close();
//                }
//                if (writer != null) {
//                    writer.close();
//                }
//            }
//        }
//    }
//
//
//    /**
//     * 分割PDF文件
//     * @param inputPdfPath
//     * @param outputFolderPath
//     * @param pageCountPerSplit
//     * @throws IOException
//     */
//    public  void splitPdf(String inputPdfPath, String outputFolderPath, int pageCountPerSplit) throws IOException {
//        // 创建输入的 PDF 文档对象
//        PdfDocument inputPdf = new PdfDocument(new PdfReader(inputPdfPath));
//        int totalPages = inputPdf.getNumberOfPages();
//
//        int startPage = 1;
//        int splitNumber = 1;
//        while (startPage <= totalPages) {
//            int endPage = Math.min(startPage + pageCountPerSplit - 1, totalPages);
//            // 构建输出文件的路径
//            String outputFilePath = outputFolderPath + File.separator + "split_" + splitNumber + ".pdf";
//            // 创建输出的 PDF 文档对象
//            PdfDocument outputPdf = new PdfDocument(new PdfWriter(outputFilePath));
//            // 从输入文档中复制指定范围的页面到输出文档
//            inputPdf.copyPagesTo(startPage, endPage, outputPdf);
//            outputPdf.close();
//
//            startPage = endPage + 1;
//            splitNumber++;
//        }
//        inputPdf.close();
//    }
//
//    /**
//     * 获取最后的文本
//     */
//    public String handleTxt(File txtFile) throws IOException {
//        String[] punctuation = {"。", "，", "？", "！"};
//        List<String> punctuations = Arrays.asList(punctuation);
//        InputStream inputstream = null;
//        String filename = txtFile.getName().substring(0, txtFile.getName().indexOf("."));
//        BufferedReader reader = null;
//        String temp = "";
//        StringBuffer buffer_final = new StringBuffer();
//        try {
//            reader = new BufferedReader(new InputStreamReader(new FileInputStream(txtFile)));
//            while ((temp = reader.readLine()) != null) {
//                if (temp.contains("《")) {
//                    String restr = temp.replace("《", "").replace("》", "").trim();
//                    buffer_final.append(restr);
//                    buffer_final.append("\n");
//                    buffer_final.append(filename);
//                    buffer_final.append("\n");
//                } else if (temp.contains("*********") || temp.contains("td")) {
//                    buffer_final.append(temp.trim());
//                    buffer_final.append("\n");
//                } else {
//                    subContentByLength(temp.trim(), buffer_final);
//                }
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            if (reader != null) {
//                try {
//                    reader.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (inputstream != null) {
//                try {
//                    inputstream.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        //写入文件
//        FileWriter writer = null;
//        String finalsrt = "";
//        try {
//            finalsrt = txtFile.getAbsolutePath().replace(".", "_final.");
//            writer = new FileWriter(finalsrt, false);
//            writer.write(buffer_final.toString());
//            return finalsrt;
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        } finally {
//            if (writer != null) {
//                writer.flush();
//                writer.close();
//            }
//        }
//    }
//
//    /**
//     * 递归处理字符串
//     *
//     * @param content
//     * @param buffer
//     */
//    private void subContentByLength(String content, StringBuffer buffer) {
//        //超过16个汉字进行分行
//        String[] punctuation = {"。", "，", "？", "！", "；"};
//        List<String> punctuations = Arrays.asList(punctuation);
//        int length = content.length();
//        if (length > 16) {
//            boolean isMatch = false;
//            for (int i = 15; i >= 0; i--) {
//                String lastChar = content.substring(i, i + 1);
//                if (punctuations.contains(lastChar)) {
//                    String newContent = content.substring(0, i + 1);
//                    buffer.append(newContent);
//                    buffer.append("\n");
//                    content = content.substring(i + 1);
//                    isMatch = true;
//                    break;
//                }
//            }
//            if (isMatch) {
//                subContentByLength(content, buffer);
//            } else {
//                buffer.append(content);
//                buffer.append("\n");
//            }
//        } else {
//            buffer.append(content);
//            buffer.append("\n");
//        }
//
//    }
//
//
//    public boolean isChinese(String str) {
//        boolean isChinese = true;
//        for (char c : str.toCharArray()) {
//            if (!Character.isIdeographic(c)) {
//                isChinese = false;
//                break;
//            }
//        }
//        return isChinese;
//    }
//
//
//    /**
//     * 获取古诗词的前四行
//     */
//    public void handleBeforeFourLines(String folderPath, int lines) throws IOException {
//        List<File> txtList = FileUtil.loopFiles(folderPath, file -> file.isFile() && file.getName().endsWith(".txt"));
//        for (File file : txtList) {
//            handleTxtByLines(file, lines);
//        }
//    }
//
//    private String handleTxtByLines(File txtFile, int lines) throws IOException {
//        InputStream inputstream = null;
//        String filename = txtFile.getName().substring(0, txtFile.getName().indexOf("."));
//        BufferedReader reader = null;
//        String temp = "";
//        StringBuffer buffer_final = new StringBuffer();
//        try {
//            int index = 0;
//            reader = new BufferedReader(new InputStreamReader(new FileInputStream(txtFile)));
//            while ((temp = reader.readLine()) != null) {
//                if (temp.contains("*********")) {
//                    index = 0;
//                    buffer_final.append(temp.trim());
//                    buffer_final.append("\n");
//                } else {
//                    if (index == lines) {
//                        continue;
//                    }
//                    buffer_final.append(temp.trim());
//                    buffer_final.append("\n");
//                    index++;
//                }
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            if (reader != null) {
//                try {
//                    reader.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (inputstream != null) {
//                try {
//                    inputstream.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        //写入文件
//        FileWriter writer = null;
//        String finalsrt = "";
//        try {
//            finalsrt = txtFile.getAbsolutePath().replace(".", "_final.");
//            writer = new FileWriter(finalsrt, false);
//            writer.write(buffer_final.toString());
//            return finalsrt;
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        } finally {
//            if (writer != null) {
//                writer.flush();
//                writer.close();
//            }
//        }
//    }
//
//    /**
//     * 电子书epub 转为 txt
//     *
//     * @param folderPath
//     */
//    public void handleEpubToTxt(String folderPath) {
//        List<File> srcFiles = FileUtil.loopFiles(folderPath, backfile -> backfile.isFile() && backfile.getName().endsWith(".epub"));
//        for (File file : srcFiles) {
//            String epubFilePath = file.getAbsolutePath();
//            String txtFilePath = file.getName().replace(".epub", ".txt");
//            try {
//                // 使用 EPUB 读取器读取 EPUB 文件
//                EpubReader epubReader = new EpubReader();
//                Book book = epubReader.readEpub(new FileInputStream(epubFilePath));
//                StringBuilder content = new StringBuilder();
//                // 遍历书的所有章节
//                for (int i = 0; i < book.getSpine().size(); i++) {
//                    // 获取章节内容
//                    String chapterContent = new String(book.getSpine().getSpineReferences().get(i).getResource().getData());
//                    content.append(chapterContent);
//                    content.append("\n");
//                }
//                // 将提取的内容写入 TXT 文件
//                try (BufferedWriter writer = new BufferedWriter(new FileWriter(txtFilePath))) {
//                    writer.write(content.toString());
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//
//
//        }
//
//    }
//}
